Ordinary
About

Spring DB 서버가 중단되면

profileordilov / 2022. 3. 31

Spring 초기에 DB 연결이 안되면

JPA와 Hikari CP를 사용하고 있는 경우 DB 서버와 연결이 안되는 경우 서버가 시작되지 않습니다.

Error creating bean with name 'entityManagerFactory' ..

Hikari CP 에서 몇 차례 연결 시도를 하고 실패하는 경우 entityManagerFactory 빈을 생성할 때 에러가 발생합니다.

서버 실행 중간에 DB 연결이 안되면

테스트를 위해서 실행 중간에 DB 서버를 종료시켰습니다. 서버가 실행되는 중에 DB 연결이 끊기더라도 DB 연결이 필요한 요청이 오기 전까지 확인하지 않았습니다.

HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@65ff8761 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.

연결이 다시 들어오면 DB 커넥션 풀에서 연결을 찾는 과정을 반복하고 로그를 남깁니다. Hikari Pool을 사용하는 경우 위와 같은 로그가 남게 됩니다. 로그 기록을 보면 실패하고 연결을 기간을 두고 10번을 시도한 것을 확인할 수 있었습니다.

HikariPool-1 - Connection is not available, request timed out after 30000ms.

10번이 완료되고 나서 요청 시간이 30000ms 지나서 연결이 안된 것으로 판단한 것을 확인할 수 있습니다. 이때 나오는 30000ms 가 maxLifetime으로 필요에 따라 늘리거나 줄일 수 있습니다.

spring: datasource: hikari: maxLifetime: 30000

따로 설정하지 않아도 위에서 나온 기본값처럼 30000ms 가 설정됩니다. 중요한 점은 이때 지정하는 maxLifetime은 데이터베이스에 적용된 connection time limit 보다 작아야 합니다.

java.net.ConnectException: Connection refused: no further information

최종적으로 확인할 수 있는 에러는 ConnectionException으로 나오게 됩니다. 웹 요청이었다면 방금 거치는 DB 연결이 끊기는지 확인하는 시간까지 다 지난 후에 에러 응답이 나가게 됩니다.